QLoRA:一种高效LLMs微调方法,48G内存可调LLaMA-65B (开源)
引言
QLoRA是一种「高效的微调方法」,可以在保持完整的16位微调任务性能的情况下,将内存使用降低到足以「在单个48GB GPU上微调650亿参数模型」。QLORA通过冻结的4位量化预训练语言模型向低秩适配器(LoRA)反向传播梯度。作者公布了他们训练的系列模型Guanaco,与之前公开发布的所有模型相比,在Vicuna基准测试中表现更好,「只需要在单个GPU上微调24小时就能达到ChatGPT性能水平的99.3%」 。
Paper:https://arxiv.org/pdf/2305.14314.pdf
Code:https://github.com/artidoro/qlora
背景介绍
大型语言模型(LLM)调优是提高其性能的最有效的方式,它允许我们添加所需的内容或删除不需要的内容。但是,「微调非常大的模型的成本过高;对650亿参数的LLaMA模型进行进行16位微调需要超过780GB的GPU内存」。虽然最近的量化方法可以减少LLM的内存占用量,但是这些技术仅适用于推理,并不适合在训练过程中使用。
本文首次证明可以在不降低任何性能的情况下微调量化4-bit模型。提出了一种高效的模型训练方法QLoRA,该方法使用一种新颖的高精度技术将预训练模型量化为4-bit,然后添加一小组可学习的低秩适配器权重( Low-rank Adapter weights),这些权重通过量化权重的反向传播梯度进行调优。
与16-bit完全微调基线相比,QLORA 将微调65B参数模型的平均内存需求从 >780GB降低到 <48GB,并且不会降低模型预测性能。「这标志着LLM调优发生了重大转变,大模型的调优并非遥不可及」:现在是迄今为止最大的公开可用模型,可在单个 GPU 上进行微调。作者使用 QLORA,训练了 Guanaco 系列模型,在单个消费类 GPU 上训练不到12小时,模型在 Vicuna 基准测试中达到了 ChatGPT 性能水平的97.8%;在单个专业级GPU上训练了不到24小时,模型在 Vicuna 基准测试上达到了 ChatGPT 性能水平的99.3%;在部署过程中,最小的 Guanaco 模型(7B 参数)仅需要 5 GB 的内存,并且在 Vicuna 基准测试中比 26 GB 的 Alpaca模型高出20个百分点以上。
QLoRA微调方法
QLORA是一种针对深度神经网络的低精度量化和微调技术,能够实现高保真的4位微调。「它采用了两种技术——4位NormalFloat (NF4)量化和Double Quantization」。同时,引入了Paged Optimizers,它可以避免梯度检查点操作时内存爆满导致的内存错误。QLORA包含一种低精度存储数据类型(通常为4-bit)和一种计算数据类型(通常为BFloat16)。在实践中,QLORA权重张量使用时,需要将将张量去量化为BFloat16,然后在16位计算精度下进行矩阵乘法运算。
为了防止梯度检查点所引起的内存波动导致的内存不足错误,QLORA引入了Paged Optimizers技术。这种技术使用了NVIDIA统一内存的特性,实现了CPU和GPU之间自动的页面转换,在GPU内存不足的情况下自动将优化器状态转移到CPU内存。QLORA通常使用4位NormalFloat作为存储数据类型和16位BrainFloat作为计算数据类型,在计算梯度时只对LoRA的参数计算梯度。
QLoRA对比标准FT
QLoRA 是否能像标准模型 Fine-tuning 一样有效呢?作者分析了 QLoRA 的各个组成部分,包括 NormalFloat4 相对于标准 Float4 的影响,以及对比了QLoRA的16-bit Adapter FT和标准FT。
Guanaco系列模型
作者使用4-bitQLORA量化技术对不同规模参数模型进行调优,并与16位精度调优进行对比。结果表明,使用双量化的NF4可以匹配BFloat16性能,并且FP4调优结果都要比两者低一个百分点。如下图所示:
本文评价
该阐述了QLoRA方法可以使用4位基础模型和低秩适配器达到16位全精度微调的效果,并对聊天机器人的性能进行了评估。但该方法未在33B和65B规模上比较全精度微调的结果,并且使用的基准数据集可能限制了评价的泛化性。
推荐阅读
[1]斯坦福发布AlpacaFarm,RLHF人工成本降低45倍!
[2]Meta最新模型LIMA,没有RLHF,远胜Alpaca!!
[6]MPT-7B:可商用的开源模型,效果堪比LLaMA-7B